class Acionista < ActiveRecord::Base

  attr_writer :participacao

  default_scope :order => 'valor_nominal DESC'

  belongs_to :empreendimento
  delegate :capital_social_valor, :pleito, :to => :empreendimento, :allow_nil => true

  # Validations
  validates_presence_of     :empreendimento, :nome, :valor_nominal, :cpf_cnpj,:acoes, :domicilio
  validates_uniqueness_of   :cpf_cnpj,      :scope =>  :empreendimento_id
  validates_cpf_of          :cpf_cnpj,      :if =>     :pessoa_fisica, :allow_nil => true
  validates_cnpj_of         :cpf_cnpj,      :unless => :pessoa_fisica, :allow_nil => true
  validates_numericality_of :acoes,         :greater_than_or_equal_to => 0, :only_integer => true, :allow_nil => true
  validates_numericality_of :valor_nominal, :greater_than => 0
  validates_each            :valor_nominal, :if => 'valor_nominal_changed?' do |record, attr, value|
    record.errors.add attr, 'faz total exceder o capital social' if record.total_excede?
  end
  validates_associated :empreendimento, :message => "deve ter Capital Social preenchido (Informações Adicionais)"

  # Callbacks
  def before_destroy
    if empreendimento.acionistas.count <= 1
      errors.add_to_base "Impossível excluir quotista/acionista. Ao menos um deve ser informado."
      false
    end
  end

  # Helpers
  def participacao
    soma = 0
    if !empreendimento.acionistas.nil?
      for ac in empreendimento.acionistas
        soma += ac.acoes
      end
      if acoes.nil?
        @participacao = 0      
      else
        @participacao = Float(acoes)/soma * 100
      end
    end
    #@participacao = valor_nominal ? (valor_nominal * 100.0 / (capital_social_valor || 1)) : 0.0
  end
  
  def total_excede?
    total_valor_nominal =  empreendimento.acionistas.sum(:valor_nominal) || 0
    total_valor_nominal -= valor_nominal_was if valor_nominal_was
    total_valor_nominal +  valor_nominal > capital_social_valor
  end

  # FIXME DRY (tb tem em user e pj)
  def cpf_cnpj=(value)
    self[:cpf_cnpj] = value.gsub(/\D/, "")
  end

  def pessoa_fisica
    self[:cpf_cnpj] ? self[:cpf_cnpj].length == 11 : true
  end

end
